package com.qiumo.bills.mapper;

import com.qiumo.bills.domain.TBill;
import com.qiumo.bills.vo.BillPageVo;
import com.qiumo.bills.vo.BillVo;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

/**
 * 账单列表Mapper接口
 *
 * @author qiumobill
 * @date 2022-06-05
 */
public interface TBillMapper
{
    /**
     * 查询账单列表
     *
     * @param id 账单列表主键
     * @return 账单列表
     */
    public TBill selectTBillById(Long id);

    /**
     * 查询账单列表列表
     *
     * @param tBill 账单列表
     * @return 账单列表集合
     */
    public List<TBill> selectTBillList(TBill tBill);

    /**
     * 新增账单列表
     *
     * @param tBill 账单列表
     * @return 结果
     */
    public int insertTBill(TBill tBill);

    /**
     * 修改账单列表
     *
     * @param tBill 账单列表
     * @return 结果
     */
    public int updateTBill(TBill tBill);

    /**
     * 删除账单列表
     *
     * @param id 账单列表主键
     * @return 结果
     */
    public int deleteTBillById(Long id);

    /**
     * 批量删除账单列表
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteTBillByIds(Long[] ids);

    /**
     * 根据ID获取所有消费金额
     * @param userId
     * @return
     */
    BigDecimal getAllMoneyById(Long userId);

    /**
     * 获取月度金额
     * @param userId
     * @param year
     * @param month
     * @return
     */
    BigDecimal getMMoneyById(@Param("userId") Long userId, @Param("year") int year, @Param("month") int month);

    /**
     * 获取月度消费次数
     * @param userId
     * @param year
     * @param month
     * @return
     */
    Integer getMNum(@Param("userId") Long userId, @Param("year") int year, @Param("month") int month);

    /**
     * 获取本月排行
     * @param year
     * @param month
     * @return
     */
    List<BillVo> getList(@Param("year") int year, @Param("month") int month);


    /**
     * 获取近七天日期
     * @return
     */
    List<String> getDayList();

    /**
     * 近七天金额列表
     * @return
     */
    List<BigDecimal> getMList();

    /**
     * 最新五条记录
     * @return
     */
    List<BillPageVo> getBillFive();

    List<BillPageVo> getPage(TBill tBill);
}
